@echo off
rem chcp 65001

@rem 定义右键所在注册表
@rem 普通右键
set simpl="HKEY_CLASSES_ROOT\*\shell"
@rem 桌面右键
set desktop="HKEY_CLASSES_ROOT\Directory\Background\shell"

:start
echo.
echo "输入选项:"
echo "0: 退出"
echo "1: 添加功能到右键"
echo "2: 删除右键的功能"
echo "3: 查询右键的功能"
set name=
set /p  name="请输入:"

if %name% equ 0 (
echo "正在退出..."
choice /t 1 /d y /n >nul
goto end
)

if %name% equ 1 (
goto one
) else if %name% equ 2 (
goto two
) else if %name% equ 3 (
goto three
) else (
echo "未识别命令!"
goto start
)



@rem 添加功能到右键
:one
@rem 提示查询普通右键或者桌面右键包含桌面右键子项
echo "1. 添加普通右键功能"
echo "2. 添加桌面右键功能"
set /p typeNum="输入添加类型序号(为空则返回开始):"
set /p kName="输入右键功能名称(为空则为default):"
set /p exec="输入该功能需要执行操作(如果脚本加上cmd /c前置即可):"
set super=""
set regPath=""

@rem 防止输入序号为空,则返回开始
if "%typeNum%" == "" (
echo "无法识别输入的序号!"
goto start
)

if %typeNum% equ 1 (
  @rem 添加普通右键
   if "%kName%" == ""  (
   @rem  如果没有设置名称, 则设置为 default
  echo "没有名称"
   set regPath=%simpl%\default\command  /f   /d  "%1"
   ) else if "%exec%" == "" (
   @rem 如果没有执行操作, 则为空, 后续如果添加则进行覆盖即可
  echo "没有执行"
   set regPath=%simpl%\default\command  /f  /d  "%1"
   ) else (
   echo name:  "%kName%"   exe:  "%exec%"
   set regPath=%simpl%\%kName%\command  /f  /d  "%exec%"  "%1"
   )
) else if %typeNum% equ 2 (
  @rem 添加桌面级右键
 rem echo "添加右键功能, 面对桌面级别需要进行思考"
   if "%kName%" == ""  (
   set regPath=%desktop% /s
   ) else (
   set regPath=%desktop% /s  /f  %kName%
   )
) else if "%typeNum%" == "" (
@rem 防止输入序号为空,则返回开始
echo "无法识别输入的序号!"
set typeNum=
goto start
) else (
echo "输入选项有误!"
set typeNum=
goto start
)
@rem 进行添加
echo %regPath%
reg add  %regPath%
@ rem 重置添加的注册表路径, 输入的项名称, 序号
set regPath=""
set kName=""
set typeNum=
set exec=""
goto start



@rem 删除右键功能
:two
echo "删除右键功能, 同时可能包含子项删除"
goto start

@rem 简单桌面查询右键功能
:three
@rem 提示查询普通右键或者桌面右键包含桌面右键子项
echo "1. 查询普通右键功能"
echo "2. 查询桌面右键功能"
set /p typeNum="输入类型查询序号(为空则返回开始):"
set /p kName="输入查询的功能名称(为空则查询所有):"
set super=""
set regPath=""

@rem 防止输入序号为空,则返回开始
if "%typeNum%" == "" (
echo "无法识别输入的序号!"
goto start
)

if %typeNum% equ 1 (
  @rem 查询普通右键
   if "%kName%" == ""  (
   set regPath=%simpl% /s
   ) else (
   set regPath=%simpl%  /s  /f  %kName%
   )
) else if %typeNum% equ 2 (
  @rem 查询桌面级右键
   if "%kName%" == ""  (
   set regPath=%desktop% /s
   ) else (
   set regPath=%desktop% /s  /f  %kName%
   )
) else if "%typeNum%" == "" (
@rem 防止输入序号为空,则返回开始
echo "无法识别输入的序号!"
set typeNum=
goto start
) else (
echo "输入选项有误!"
set typeNum=
goto start
)

@rem 进行查询
reg query %regPath%
@ rem 重置查询的注册表路径, 输入的项名称, 序号
set regPath=""
set kName=""
set typeNum=
goto start

:end

@ rem 使用程序进行处理
